import angular from "angular";

export default angular
  .module("webui.ctrls.nav", [
    "webui.services.configuration",
    "webui.services.modals",
    "webui.services.rpc",
    "webui.services.rpc.helpers",
    "webui.services.settings",
    "webui.services.utils"
  ])
  .controller("NavCtrl", [
    "$scope",
    "$modals",
    "$rpc",
    "$rpchelpers",
    "$fileSettings",
    "$globalSettings",
    "$globalExclude",
    "$utils",
    "$translate",
    "$filter",
    function(
      scope,
      modals,
      rpc,
      rhelpers,
      fsettings,
      gsettings,
      gexclude,
      utils,
      translate,
      filter
    ) {
      scope.isFeatureEnabled = function(f) {
        return rhelpers.isFeatureEnabled(f);
      };

      // initially collapsed in mobile resolution
      scope.collapsed = true;

      scope.onDownloadFilter = function() {
        // Forward to MainCtrl.
        scope.$parent.downloadFilter = scope.downloadFilter;
        scope.$parent.onDownloadFilter();
      };

      // manage download functions
      scope.forcePauseAll = function() {
        rpc.once("forcePauseAll", []);
      };

      scope.purgeDownloadResult = function() {
        rpc.once("purgeDownloadResult", []);
      };

      scope.unpauseAll = function() {
        rpc.once("unpauseAll", []);
      };

      scope.addUris = function() {
        modals.invoke("getUris", _.bind(rhelpers.addUris, rhelpers));
      };

      scope.addMetalinks = function() {
        modals.invoke("getMetalinks", _.bind(rhelpers.addMetalinks, rhelpers));
      };

      scope.addTorrents = function() {
        modals.invoke("getTorrents", _.bind(rhelpers.addTorrents, rhelpers));
      };

      scope.changeCSettings = function() {
        modals.invoke("connection", rpc.getConfiguration(), _.bind(rpc.configure, rpc));
      };

      scope.changeGSettings = function() {
        rpc.once("getGlobalOption", [], function(data) {
          var starred = utils.getCookie("aria2props");
          if (!starred || !starred.indexOf) starred = [];
          var vals = data[0];
          var settings = {};

          // global settings divided into
          // file settings + some global specific
          // settings

          _.forEach([fsettings, gsettings], function(sets) {
            for (var i in sets) {
              if (gexclude.indexOf(i) != -1) continue;

              settings[i] = _.cloneDeep(sets[i]);
              settings[i].starred = starred.indexOf(i) != -1;
            }
          });

          for (var i in vals) {
            if (i in gexclude) continue;

            if (!(i in settings)) {
              settings[i] = { name: i, val: vals[i], desc: "", starred: starred.indexOf(i) != -1 };
            } else {
              settings[i].val = vals[i];
            }
          }

          modals.invoke(
            "settings",
            _.cloneDeep(settings),
            filter("translate")("Global Settings"),
            filter("translate")("Save"),
            function(chsettings) {
              var sets = {};
              var starred = [];
              for (var i in chsettings) {
                // no need to change default values
                if (settings[i].val != chsettings[i].val) sets[i] = chsettings[i].val;

                if (chsettings[i].starred) {
                  starred.push(i);
                }
              }

              console.log("saving aria2 settings:", sets);
              console.log("saving aria2 starred:", starred);

              rpc.once("changeGlobalOption", [sets]);
              utils.setCookie("aria2props", starred);
            }
          );
        });
      };

      scope.showServerInfo = function() {
        modals.invoke("server_info");
      };

      scope.showAbout = function() {
        modals.invoke("about");
      };

      scope.changeLanguage = function(langkey) {
        translate.use(langkey);
      };

      scope.shutDownServer = function() {
        rpc.once("shutdown", []);
      };
    }
  ]).name;
